home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 December / macformat-031.iso / mac / Shareware City / Developers / Tools Plus 2.6.1 Evaluation Kit / Tools Plus 2.6.1 / Tools Plus for THINK Pascal / ToolsPlus.p < prev   
Encoding:
Text File  |  1995-08-01  |  60.7 KB  |  1,170 lines  |  [TEXT/PJMM]

  1. {    Tools Plus (Version 2.6.1) THINK Pascal interface                                                                }
  2. {    Copyright (C) 1989-95 Water’s Edge Software                                                                    }
  3.  
  4. {    This unit is the interface between Pascal applications and Tools Plus.  It must be used by any program or unit    }
  5. {    that makes reference to any part of Tools Plus.                                                                    }
  6. {                                                                                                                    }
  7. {    All TYPEs, VARiables, and CONSTants required by Tools Plus are included.                                        }
  8.  
  9.  
  10.  
  11. unit ToolsPlus;
  12.  
  13. interface
  14.     const
  15.         UseColor = true;                                                {INITIALIZATION:    Use color if available        }
  16.         IgnoreColor = false;                                                {                    Don't use color                }
  17.         doNothing = 0;                                                    {POLLING:    no event                            }
  18.         doChgWindow = 1;                                                {            user clicked in an inactive window    }
  19.         doRefresh = 2;                                                    {            a window has to be refreshed        }
  20.         doGoAway = 3;                                                    {            the close box was clicked            }
  21.         doButton = 4;                                                    {            button was clicked                    }
  22.         doMenu = 5;                                                    {            menu was selected                    }
  23.         doKeyDown = 6;                                                {            a keyboard key was pressed        }
  24.         doAutoKey = 7;                                                    {            a keyboard key is auto-repeating    }
  25.         doKeyUp = 8;                                                    {            a keyboard key was released        }
  26.         doClickField = 9;                                                {            mouse clicked in inactive field        }
  27.         doScrollBar = 10;                                                {            mouse clicked in a scroll bar        }
  28.         doListBox = 11;                                                    {            some sort of List Box activity        }
  29.         doClick = 12;                                                    {            mouse click/drag                    }
  30.         doPopUpMenu = 13;                                            {            pop-up menu was selected            }
  31.         doPictButton = 14;                                                {            picture button activity                }
  32.         doClickControl = 101;                                            {            mouse clicked in a custom control    }
  33.         doManualEvent = 102;                                            {            manually processed events            }
  34.         doMoveWindow = 103;                                            {            a window was moved by user        }
  35.         doGrowWindow = 104;                                            {            a window was re-sized by the user    }
  36.         doClickDesk = 105;                                                {            mouse clicked in the desk top        }
  37.         doZoomWindow = 106;                                            {            zoom box was clicked by user        }
  38.         doSuspend = 107;                                                {            appl. suspended (in background)    }
  39.         doResume = 108;                                                {            appl. resumed (now active appl.)    }
  40.         doChgInField = 109;                                            {            editing field contents was changed    }
  41.         doPreRefresh = 110;                                            {            refresh window before T+ objects    }
  42.         inUpButton = 20;                                                {        Parts of Scroll Bar:    Up button            }
  43.         inDownButton = 21;                                                {                            Down button        }
  44.         inPageUp = 22;                                                    {                            Page Up area        }
  45.         inPageDown = 23;                                                {                            Page Down area    }
  46.         inThumb = 129;                                                    {                            Thumb                }
  47.         inClick1 = 1;                                                    {CLICK:    mouse single-click completed        }
  48.         inClick2 = 2;                                                    {            mouse double-click completed        }
  49.         inClick3 = 3;                                                    {            mouse triple-click completed        }
  50.         inClick1Drag = -1;                                                {            mouse single-click, still dragging    }
  51.         inClick2Drag = -2;                                                {            mouse double-click, still dragging    }
  52.         inClick3Drag = -3;                                                {            mouse triple-click, still dragging        }
  53.         EnterKey = chr($03);                                            {KEYS:        Key characters (ASCII) for common    }
  54.         BackSpaceKey = chr($08);                                        {                non apha-numeric keys.        }
  55.         TabKey = chr($09);                                                {                In some cases, several keys    }
  56.         ReturnKey = chr($0D);                                            {                produce the same ASCII        }
  57.         EscClearKey = chr($1B);                                        {  ($1B)            character.  They can be            }
  58.         LeftArrowKey = chr($1C);                                        {                differentiated by using the key    }
  59.         RightArrowKey = chr($1D);                                        {                code, as indicated below.        }
  60.         UpArrowKey = chr($1E);                                        {                Some keys are available only    }
  61.         DownArrowKey = chr($1F);                                        {                on an extended keyboard.        }
  62.         HelpKey = chr($05);                                            {                                                }
  63.         HomeKey = chr($01);                                            {                                                }
  64.         DeleteFwdKey = chr($7F);                                        {                                                }
  65.         EndKey = chr($04);                                                {                                                }
  66.         PageUpKey = chr($0B);                                            {                                                }
  67.         PageDownKey = chr($0C);                                        {                                                }
  68.         FKey = chr($10);                                                {  ($10)        Function keys F1 to F15            }
  69.         EscKeyCode = $35;                                            {  ($1B)        KEY CODES used to differentiate    }
  70.         ClearKeyCode = $47;                                            {  ($1B)            between keys which produce    }
  71.         F1KeyCode = $7A;                                                {                the same key characters.        }
  72.         F2KeyCode = $78;                                                {                                                }
  73.         F3KeyCode = $63;                                                {                                                }
  74.         F4KeyCode = $76;                                                {                                                }
  75.         F5KeyCode = $60;                                                {                                                }
  76.         F6KeyCode = $61;                                                {                                                }
  77.         F7KeyCode = $62;                                                {                                                }
  78.         F8KeyCode = $64;                                                {                                                }
  79.         F9KeyCode = $65;                                                {                                                }
  80.         F10KeyCode = $6D;                                            {                                                }
  81.         F11KeyCode = $67;                                                {                                                }
  82.         F12KeyCode = $6F;                                                {                                                }
  83.         F13KeyCode = $69;                                                {                                                }
  84.         F14KeyCode = $6B;                                            {                                                }
  85.         F15KeyCode = $71;                                                {                                                }
  86.         mDividingLine = '-';                                                {MENUS:        Dividing line                    }
  87.         AppleChar = chr($14);                                            {MENU CHARS:    Apple character                }
  88.         CheckChar = chr($12);                                            {                Check Mark character            }
  89.         DiamondChar = chr($13);                                        {                Diamond character                }
  90.         DotChar = chr($A5);                                            {                Dot (or bullet) character            }
  91.         NoChar = chr($00);                                                {                no character                    }
  92.                                                                     {PICTURE BUTTONS:                            }
  93.         picbutInstantEvent = $80000000;                                {        Report event on mouse-down            }
  94.         picbutTrackWithHilite = $40000000;                                {        Track using hiliting, like a radio button    }
  95.         picbutLockSelected = $20000000;                                {        Lock if selected (mouse can't deselect)    }
  96.         picbutSwitchSelected = $10000000;                            {        Switch 'selected' state if clicked        }
  97.         picbutRepeatEvents = $08000000;                                {        Repeat event when button is held down    }
  98.         picbutAutoValueChg = $04000000;                                {        Automatically change button's value    }
  99.         picbutScaleLinear = $00000000;                                {        Rate of automatic value change…        }
  100.         picbutScaleSlowAccel = $01000000;                            {            Linear, Slow Acceleration,            }
  101.         picbutScaleMedAccel = $02000000;                            {            Medium Acceleration, and            }
  102.         picbutScaleFastAccel = $03000000;                            {            Fast Acceleration.                    }
  103.         picbutLinear = 0;                                                {            Linear (use in structure)            }
  104.         picbutSlowAccel = 1;                                            {            Slow (use in structure)                }
  105.         picbutMedAccel = 2;                                            {            Medium (use in structure)            }
  106.         picbutFastAccel = 3;                                            {            Fast (use in structure)                }
  107.         picbutValueWrap = $00800000;                                    {        Button's range of values 'wrap' around    }
  108.         picbutLeftRightSplit = $00400000;                                {        Left side reduces value, right increases    }
  109.         picbutTopBottomSplit = $00200000;                            {        Top increases value, bottom reduces    }
  110.         picbutMultiStage = $00100000;                                    {        Button has multiple stages                }
  111.         picbutBigSICN3D = $00080000;                                    {        Create a larger SICN 3D button            }
  112.         picbutUsePICTS = $00040000;                                    {        Use PICTs instead of icons                }
  113.         picbutGray4use8 = $00020000;                                    {        Use 8-bit color pict on 4-bit gray monitor    }
  114.                                                                     {       Selection Effects…                        }
  115.         picbutSelectDarken = $00010000;                                {        Darken image                            }
  116.         picbutSelectDarkenSICN3D = $00008000;                        {        Darken (and push in) a 3D SICN icon    }
  117.         picbutSelectLightenSICN3D = $00004000;                        {        Lighten (and push in) a 3D SICN icon    }
  118.         picbutSelectPushedSICN3D = $00002000;                        {        Same color (and push in) a 3D SICN icon}
  119.         picbutSelectAltImage = $00000400;                            {        Use an alternate image                    }
  120.                                                                     {       Disabling Effects…                        }
  121.         picbutDimUsingBlackLite = $00000100;                            {        Overlay Black color using Lt Gray pat.    }
  122.         picbutDimUsingWhiteLite = $00000080;                            {        Overlay White color using Lt Gray pat.    }
  123.         picbutDimUsingWhite = $00000040;                                {        Overlay White color using Gray pat.        }
  124.         picbutDimLeaveBorder = $00000008;                            {        Leave border when applying effect        }
  125.         picbutDimAltImage = $00000004;                                {        Use an alternate image                    }
  126.         picbutDimNoChange = $00000002;                                {        Button looks the same when disabled    }
  127.                                                                     {POP-UP MENUS:                                }
  128.         popupNeverDimOutline = $0100;                                {        Never dim the control's outline?            }
  129.         popupNeverDimSelection = $0080;                                {        Never dim the selected item's text?        }
  130.         popupNeverDimTitle = $0040;                                    {        Never dim the title?                        }
  131.         popupNoArrow = $0020;                                        {        Is the "down arrow" hidden?                }
  132.         popupMultiSelect = $0010;                                        {        Allow multiple items to be selected?        }
  133.         popupUseWFont = $0008;                                        {        Use the window's font for the menu?    }
  134.         popupIconTitle = $0004;                                        {        Draw icon in the control's title?            }
  135.         popupFixedTitle = $0002;                                        {        Is a fixed title displayed in the control?    }
  136.         popupDefaultType = $0000;                                        {        Default menu (sys font, 1 item, no icon)    }
  137.         arrowCursor = 0;                                                {CURSORS:    "arrow" cursor                    }
  138.         GoAway = true;                                                    {WINDOWS:    no "close box"                    }
  139.         NoGoAway = false;                                                {                window has a "close box"        }
  140.         Modal = true;                                                    {                window is modal                }
  141.         NotModal = false;                                                {                window is modeless                }
  142.         ZoomBox = 8;                                                    {                zoom box (add to procID)        }
  143.         wCenter = $00010000;                                            {                auto-centering (add to procID)    }
  144.         wTile = $00020000;                                                {                auto-tiling (add to procID)        }
  145.         wPalette = $80000000;                                            {                palette behavior (add to procID)    }
  146.         ordPaletteProc = 32000;                                        {                window that looks like Palette    }
  147.         paletteProc = 32000 + wPalette;                                {                T+’s Floating Palette window    }
  148.         altPaletteProc = 32002 + wPalette;                                {                T+’s palette with drag bar on left    }
  149.         wNoKind = 0;                                                    {  Kinds of Windows:    Not open                }
  150.         wToolBarKind = 1;                                                {                        Tool Bar                }
  151.         wFloatingKind = 2;                                                {                        Floating Palette            }
  152.         wStandardKind = 3;                                                {                        Standard Window        }
  153.         wAnimateMove = $01;                                            {  Moving Windows:    Animate w/Zoom Lines    }
  154.         wOffsetForToolBar = $02;                                        {                        Offset co-ords for TB    }
  155.         wShow = true;                                                    {    Hiding Windows:    Display (unhide)        }
  156.         wHide = false;                                                    {                        Hide window            }
  157.         tbShiftWindows = $01;                                            {TOOL BAR:    Shift windows when TB opens    }
  158.         tbOffsetNewWindows = $02;                                    {                Offset new windows as they    }
  159.                                                                     {                  are opened (if TB is open).    }
  160.         DefaultButton = 4;                                                {BUTTONS:        “default” for the window            }
  161.         selected = true;                                                    {                button is selected (i.e. checked)}
  162.         notSelected = false;                                            {                button is not selected            }
  163.         useWFont = 8;                                                    {                use parent window's font        }
  164.         scrlLeftEdge = -1;                                                {SCROLL BARS:    left edge of document        }
  165.         scrlTopEdge = -1;                                                {                    top edge of document        }
  166.         scrlRightEdge = 32767;                                            {                    right edge of document        }
  167.         scrlBottomEdge = 32767;                                        {                    bottom edge of document    }
  168.                                                                     {LIST BOXES:                                    }
  169.         lOnlyOne = -128;                                                {        Prohibit multiple selections                }
  170.         lExtendDrag = 64;                                                {        Drag extends without shift key            }
  171.         lNoDisjoint = 32;                                                {        Click deselects previsous selections    }
  172.         lNoExtend = 16;                                                {        Shift won't extend selection                }
  173.         lNoRect = 8;                                                    {        Don't expand selection as a rectangle    }
  174.         lUseSense = 4;                                                    {        Shift senses state of initial line            }
  175.                                                                     {BUTTONS, MENUS, SCROLL BARS & ICONS:    }
  176.         enabled = true;                                                    {                object is enabled                }
  177.         disabled = false;                                                {                object is disabled                }
  178.         teBoxNoCR = 0;                                                {EDIT FIELDS:    box around field, no CR allowed    }
  179.         teBoxCR = 1;                                                    {                box around field, CR allowed    }
  180.         teNoBoxNoCR = 2;                                                {                no box, no CR allowed            }
  181.         teNoBoxCR = 3;                                                {                no box, CR allowed                }
  182.         teJustLeft = 0;                                                    {                text is left aligned                }
  183.         teJustCenter = 1;                                                {                text is centered                    }
  184.         teJustRight = -1;                                                {                text is right aligned                }
  185.         teSelectAll = 0;                                                    {EDIT FIELD SELECTION:    all of text            }
  186.         teSelectStart = 1;                                                {                            beginning of text    }
  187.         teSelectEnd = 2;                                                {                            end of text            }
  188.         teReplace = true;                                                {PASTE INTO FIELD:    replace field contents    }
  189.         teInsert = false;                                                {                        insert text into field        }
  190.         OkAltBut = 1;                                                    {ALERTS:    OK                (Buttons refs)        }
  191.         CanAltBut = 2;                                                    {            Cancel                                }
  192.         YesAltBut = 3;                                                    {            Yes                                }
  193.         NoAltBut = 4;                                                    {            No                                    }
  194.         ContAltBut = 5;                                                    {            Continue                            }
  195.         SkipAltBut = 6;                                                    {            Skip                                }
  196.         QuitAltBut = 7;                                                    {            Quit                                }
  197.         NoButtonAlert = 0;                                                {            No buttons        (Alert Defs)            }
  198.         OkAlert = 11100;                                                {            OK (default)                        }
  199.         CanAlert = 11200;                                                {            Cancel (default)                    }
  200.         OkCanAlert = 22210;                                            {            OK (default) + Cancel                }
  201.         CanOkAlert = 21210;                                            {            OK + Cancel (default)                }
  202.         YesNoAlert = 22430;                                            {            Yes (default) + No                    }
  203.         NoYesAlert = 21430;                                            {            Yes + No (default)                     }
  204.         YesNoCanAlert = 33243;                                        {            Yes (default) + No + Cancel            }
  205.         NoYesCanAlert = 32243;                                        {            Yes + No (default) + Cancel            }
  206.         nmSysBeep = -1;                                                {NOTIFICATION:    Use System Error sound    }
  207.         nmSilentNote = 0;                                                {                    Silent notification            }
  208.         nmDefaultMsg = ' ';                                                {                    Use default message        }
  209.         nmNoMsg = '';                                                    {                    Don't display an alert        }
  210.         nmResetWhenDone = true;                                        {                    Reset to defaults after used}
  211.         nmKeepSettings = false;                                        {                    Keep settings after used    }
  212.         NoIcon = -32768;                                                {ICONS:    No icon used                        }
  213.         stopIcon = 0;                                                    {            Stop icon                            }
  214.         noteIcon = 1;                                                    {            Note icon                            }
  215.         cautionIcon = 2;                                                {            Caution icon                        }
  216.                                                                     {        Disabled icons' default appearance…    }
  217.         DfltIconDimBlackLtPat = $01;                                    {            Overlay Black color w/ Lt Gray pat.    }
  218.         DfltIconDimWhiteLtPat = $02;                                    {            Overlay White color w/ Lt Gray pat.    }
  219.         DfltIconDimWhitePat = $04;                                        {            Overlay White color w/ Gray pat.    }
  220.         DfltIconLeaveBorder = $20;                                        {        Leave border when selected or disabled    }
  221.         DfltIconUpdateNow = $8000;                                    {        Update all windows with changes        }
  222.         on = true;                                                        {MISCELLANEOUS:                            }
  223.         off = false;                                                        {                                                }
  224.         maxNullTime = $7FFFFFFF;                                        {        Infinite time between doNothing evts    }
  225.         ZoomAcross = 0;                                                {ZOOM LINES:    transitional                        }
  226.         ZoomIn = -1;                                                    {                zoom inward (further away)        }
  227.         ZoomOut = 1;                                                    {                zoom outward (nearer)            }
  228.         none = 0;                                                        {used primarily for polling                        }
  229.  
  230.  
  231.  
  232.  
  233.     type
  234.  
  235.     { -   -   -   -   -   -   -   -   -   -   These record "types" are used for information transfer between   -   -   -   -   -   -   -   -   -   -   -    }
  236.     {                                     your application and Tools Plus libraries.                                    }
  237.  
  238.     {= Polling record's "event modifiers" info}
  239.         TPModifiersRec = packed record                                {This variable record contains an event's        }
  240.                 case integer of                                            {    "modifiers" in 2 formats…                    }
  241.                     0: (                                                        {    • Macintosh Event:                            }
  242.                             Num: integer                                            {        integer (bit operations required)            }
  243.                     );                                                            {                                                }
  244.                     1: (                                                        {    • Modifier integer parsed into components:    }
  245.                             bit15, bit14, bit13: boolean;                            {        (reserved bits)                            }
  246.                             ControlKey: boolean;                                    {        Control key was down at event (=1)        }
  247.                             OptionKey: boolean;                                    {        Option key was down at event (=1)        }
  248.                             CapsLock: boolean;                                    {        Caps Lock was down at event (=1)        }
  249.                             ShiftKey: boolean;                                    {        Shift key was down at event (=1)        }
  250.                             CmdKey: boolean;                                    {        Command key was down at event (=1)    }
  251.                             MouseUp: boolean;                                    {        Mouse button was UP at event (=1)        }
  252.                             bit6, bit5, bit4, bit3, bit2, bit1, bit0: boolean            {        (reserved bits)                            }
  253.                     );                                                            {                                                }
  254.             end;
  255.     {= Polling record's "button" info}
  256.         TPPollButtonRec = record
  257.                 Num: integer;                                                {Button number                                    }
  258.                 DoubleClick: boolean                                        {Did a double-click occur?                        }
  259.             end;
  260.     {= Polling record's "scroll bar" info}
  261.         TPPollScrollBarRec = record
  262.                 Num: integer;                                                {Scroll bar number                                }
  263.                 Part: integer                                                {Scroll bar's part                                }
  264.             end;
  265.     {= Polling record's "list box" info}
  266.         TPPollListBoxRec = record
  267.                 Num: integer;                                                {List box number                                }
  268.                 DoubleClick: boolean                                        {Did a double-click occur?                        }
  269.             end;
  270.     {= Polling record's "menu" info}
  271.         TPPollMenuRec = record
  272.                 Num: integer;                                                {Menu number                                    }
  273.                 Item: integer                                                {Menu item number                                }
  274.             end;
  275.     {= Polling record's "key-stroke" info}
  276.         TPPollKeyRec = packed record
  277.                 Code: integer;                                                {Logical key number of the typed key            }
  278.                 Chr: char;                                                    {ASCII character generated by typed key        }
  279.                 Unused: byte                                                { (reserved byte)                                }
  280.             end;
  281.     {= Polling record's "mouse location and time" info for mouse-down and mouse-up events}
  282.         TPPollMousePointRec = record
  283.                 Where: point;                                                {Event location in local co-ordinates            }
  284.                 When: longint;                                                {Event time in clock ticks from boot (1/60 sec)    }
  285.                 Modifiers: TPModifiersRec                                    {Event modifiers                                }
  286.             end;
  287.     {= Polling record's "mouse click/drag" info}
  288.         TPPollMouseRec = record
  289.                 What: integer;                                                {What type of mouse event? (click or drag)        }
  290.                 Down: array[1..3] of TPPollMousePointRec;                {Where & when did the mouse-down occur        }
  291.                 Up: array[1..3] of TPPollMousePointRec;                    {Where & when did the mouse-up occur            }
  292.                 Where: point                                                {Current mouse location in local co-ordinates    }
  293.             end;
  294.     {= POLLING record for Tools Plus}
  295.         TPPollPointer = ^TPPollRecord;                                    {Pointer to a Polling record                        }
  296.  
  297.         TPPollRecord = record                                        {Tools Plus Polling record…                        }
  298.                 What: integer;                                                {What type of event has occurred?                }
  299.                 Window: integer;                                            {Window number of the event                    }
  300.                 Button: TPPollButtonRec;                                    {Button number/double-click status                }
  301.                 ScrollBar: TPPollScrollBarRec;                                {Scroll bar number/scroll bar part                }
  302.                 Field: integer;                                                {Field number of event                            }
  303.                 ListBox: TPPollListBoxRec;                                {List box number/double-click status            }
  304.                 Menu: TPPollMenuRec;                                        {Menu number/menu item of an event            }
  305.                 Key: TPPollKeyRec;                                        {Logical key number & character of typed key    }
  306.                 Mouse: TPPollMouseRec;                                    {Click/drag info: [1..3] where & when            }
  307.                 Modifiers: TPModifiersRec;                                    {Modifier flags                                    }
  308.                 Event: EventRecord                                        {Macintosh Toolbox Event (raw)                    }
  309.             end;
  310.  
  311.  
  312.     {= WINDOW status information}
  313.         TPWindowStatus = record                                        {Window status record…                        }
  314.                 Kind: integer;                                                { • Window kind: Tool Bar, Palette, or Standard    }
  315.                 Open: boolean;                                                { • Is the window open?                            }
  316.                 Visible: boolean;                                            { • Is this window visible (not hidden)?            }
  317.                 Active: boolean;                                            { • Is this window active?                        }
  318.                 Front: boolean;                                                { • Is this the frontmost Tools Plus window?        }
  319.                 Current: boolean;                                            { • Is this the current window?                    }
  320.                 WorkWindow: boolean;                                        { • Is this the work window?                        }
  321.                 EditFieldWindow: boolean;                                    { • Does this window have the app's active field?    }
  322.                 ActiveField: integer;                                        { • Window's active field number                    }
  323.                 StrucRect: rect;                                            { • Structure rect (global).  Incl border & title bar    }
  324.                 ContRect: rect;                                                { • Content rect (global).  Working area only.        }
  325.             end;
  326.  
  327.  
  328.     {= Color Pen information}
  329.         ColorPenState = record                                        {Color equivalent for a 'PenState' record.  This    }
  330.                 PenState: PenState;                                        {    record also stores additional values for the    }
  331.                 ForegroundColor: RGBColor;                                {    window's foreground and background        }
  332.                 BackgroundColor: RGBColor                                {    colors.                                        }
  333.             end;
  334.  
  335.  
  336.     {= Picture Button Appearance & Behavior Specification (or you can use constants instead)                        }
  337.         TPPictButtonSpec = packed record                            {Picture Button's appearance and behavior        }
  338.                                                                     {    specifications in 2 formats…                }
  339.                 case integer of                                            {                                                }
  340.                     0: (                                                        {    • Parsed into components:                    }
  341.                             InstantEvent: boolean;                                {        Report event on mouse-down            }
  342.                             TrackWithHilite: boolean;                                {        Track using hiliting, like a radio button    }
  343.                             LockSelected: boolean;                                {        Lock if selected (mouse can't deselect)    }
  344.                             SwitchSelected: boolean;                                {        Switch 'selected' state if clicked        }
  345.                             RepeatEvents: boolean;                                {        Repeat event when button is held down    }
  346.                             AutoValueChg: boolean;                                {        Automatically change button's value    }
  347.                             AutoValueScaling: 0..3;                                {        Rate of change for button's value        }
  348.                             ValueWrap: boolean;                                    {        Button's range of values 'wrap' around    }
  349.                             LeftRightSplit: boolean;                                {        Left side reduces value, right increases    }
  350.                             TopBottomSplit: boolean;                                {        Top increases value, bottom reduces    }
  351.                             MultiStage: boolean;                                    {        Button has multiple stages                }
  352.                             BigSICN3D: boolean;                                    {        Create a larger SICN 3D button            }
  353.                             UsePICTS: boolean;                                    {        Use PICTs instead of icons                }
  354.                             Gray4use8: boolean;                                    {        Use 8-bit color pict on 4-bit gray monitor    }
  355.                                                                     {       Selection Effects…                        }
  356.                             SelectDarken: boolean;                                {        Darken image                            }
  357.                             SelectDarkenSICN3D: boolean;                        {        Darken (and push in) a 3D SICN icon    }
  358.                             SelectLightenSICN3D: boolean;                        {        Lighten (and push in) a 3D SICN icon    }
  359.                             SelectPushedSICN3D: boolean;                        {        Same color (and push in) a 3D SICN icon}
  360.                             bit19, bit20: boolean;                                    {           (reserved bits)                        }
  361.                             SelectAltImage: boolean;                                {        Use an alternate image                    }
  362.                             bit22: boolean;                                        {           (reserved bit)                            }
  363.                                                                     {       Disabling Effects…                        }
  364.                             DimUsingBlackLite: boolean;                            {        Overlay Black color using Lt Gray pat.    }
  365.                             DimUsingWhiteLite: boolean;                            {        Overlay White color using Lt Gray pat.    }
  366.                             DimUsingWhite: boolean;                                {        Overlay White color using Gray pat.        }
  367.                             bit26, bit27: boolean;                                    {           (reserved bits)                        }
  368.                             DimLeaveBorder: boolean;                            {        Leave border when applying effect        }
  369.                             DimAltImage: boolean;                                {        Use an alternate image                    }
  370.                             DimNoChange: boolean;                                {        Button looks the same when disabled    }
  371.                             bit31: boolean;                                        {           (reserved bit)                            }
  372.                     );                                                            {                                                }
  373.                     1: (                                                        {    • Longint equivalent:                        }
  374.                             Num: longint;                                            {        Specification longint                    }
  375.                     );                                                            {                                                }
  376.             end;
  377.  
  378.  
  379.     {= Pop-Up Menu Appearance & Behavior Specification (or you can use constants instead)                        }
  380.         TPPopUpMenuSpec = packed record                        {Pop-Up Menu's appearance and behavior        }
  381.                                                                     {    specifications in 2 formats…                }
  382.                 case integer of                                            {                                                }
  383.                     0: (                                                        {    • Parsed into components:                    }
  384.                             bit15, bit14, bit13, bit12: boolean;                        {           (reserved bits)                        }
  385.                             bit11, bit10, bit9: boolean;                            {           (reserved bits)                        }
  386.                             NeverDimOutline: boolean;                            {        Never dim the control's outline?            }
  387.                             NeverDimSelectedItem: boolean;                        {        Never dim the selected item's text?        }
  388.                             NeverDimTitle: boolean;                                {        Never dim the title?                        }
  389.                             NoArrow: boolean;                                    {        Is the "down arrow" hidden?                }
  390.                             MultipleSelections: boolean;                            {        Allow multiple items to be selected?        }
  391.                             UseWindowFont: boolean;                            {        Display using window's font?            }
  392.                             IconInTitle: boolean;                                    {        Draw icon in the control's title?            }
  393.                             FixedTitle: boolean;                                    {        Is a fixed title displayed in the control?    }
  394.                             bit0: boolean;                                            {           (reserved bit)                            }
  395.                     );                                                            {                                                }
  396.                     1: (                                                        {    • Integer equivalent:                        }
  397.                             Num: integer;                                            {        Specification integer                    }
  398.                     );                                                            {                                                }
  399.             end;                                                            {                                                }
  400.  
  401.  
  402.  
  403.  
  404.  
  405. {==================================== I N I T I A L I Z A T I O N ====================================    }
  406. {Initialize Tools Plus}
  407.     function InitToolsPlus (MoreHandles: integer;                    {Number of MoreMasters initializing cycles        }
  408.                                     MaxWindows: integer;                            {Maximum number of windows required            }
  409.                                     UseColorFlag: boolean                            {Should Color QuickDraw be used if available?    }
  410.                                     ): Boolean;                                        {Was initialization successful?                    }
  411.  
  412.  
  413. {======================================= W I N D O W S ========================================    }
  414. {Open a window and make it current}
  415.     procedure WindowOpen (Window: integer;                        {Window number                                }
  416.                                     left, top, right, bottom: integer;                    {Window's co-ordinates (global)                    }
  417.                                     Title: string;                                        {Window's title (if applicable)                    }
  418.                                     procID: longint;                                    {Window definition ID                            }
  419.                                     goAwayFlag, modalFlag: Boolean);                {Include Close Box?  Is window modal?            }
  420.  
  421. {Open a window and make it current (co-ordinates specified as a 'rect') }
  422.     procedure WindowOpenRect (Window: integer;                    {Window number                                }
  423.                                     Bounds: rect;                                        {Window's co-ordinates (global)                    }
  424.                                     Title: string;                                        {Window's title (if applicable)                    }
  425.                                     procID: longint;                                    {Window definition ID                            }
  426.                                     goAwayFlag, modalFlag: Boolean);                {Include Close Box?  Is window modal?            }
  427.  
  428. {Open the tool bar and make it current}
  429.     procedure ToolBarOpen (Window: integer;                        {Window number                                }
  430.                                     Height: integer;                                    {Tool bar height                                    }
  431.                                     procID: integer);                                    {Appearance/behavior specifications            }
  432.  
  433. {Close a window}
  434.     procedure WindowClose (Window: integer);                        {Window number                                }
  435.  
  436. {Change a window's size}
  437.     procedure WindowSize (Window: integer;                        {Window number                                }
  438.                                     Width, Height: integer;                            {Window's new width and height                    }
  439.                                     Update: boolean);                                {Force doRefresh event for newly exposed rgn?    }
  440.  
  441. {Move a window to the specified co-ordinates}
  442.     procedure WindowMove (Window: integer;                        {Window number                                }
  443.                                     hGlobal: integer;                                    {Horizontal co-ordinates (global)                }
  444.                                     vGlobal: integer;                                    {Vertical co-ordinates (global)                    }
  445.                                     procID: integer);                                    {Behavior specification                            }
  446.  
  447. {Hide or show a window}
  448.     procedure WindowDisplay (Window: integer;                    {Window number                                }
  449.                                     Show: boolean);                                    {Should the window be shown?                    }
  450.  
  451. {Make a specified window the "active" and "current" window}
  452.     procedure ActivateWindow (Window: integer);                    {Window number                                }
  453.  
  454. {Set a window's title}
  455.     procedure WindowTitle (Window: integer;                        {Window number                                }
  456.                                     Title: string);                                    {Window's title (if applicable)                    }
  457.  
  458. {Set the current window's "growing" limits (i.e. maximum/minimum size) }
  459.     procedure SetWindowSizeLimits (minHoriz, minVert, maxHoriz, MaxVert: integer);{Window's size limits in pixels}
  460.  
  461. {Set the current window's standard co-ordinates and user co-ordinates for "zooming"}
  462.     procedure SetWindowZoom (userRect, stdRect: rect);            {User & standard co-ordinates (global)            }
  463.  
  464. {Get the current window's user co-ordinates & standard co-ordinates for "zooming"}
  465.     procedure GetWindowZoom (var userRect, stdRect: Rect);        {User & standard co-ordinates (global)            }
  466.  
  467. {Make a specified window "current", but do not activate it}
  468.     procedure CurrentWindow (Window: integer);                    {Window number                                }
  469.  
  470. {Make the "active" window "current"}
  471.     procedure CurrentWindowReset;
  472.  
  473. {Get a window's status}
  474.     procedure WindowStatus (Window: integer;                        {Window number                                }
  475.                                     var Status: TPWindowStatus);                    {Window's status record                        }
  476.  
  477. {Get the active window number (last used window if Tool Bar and/or Floating Palettes are open)                        }
  478.     function ActiveWindowNumber: integer;                            {Window number of active window                }
  479.  
  480. {Get the current window number}
  481.     function CurrentWindowNumber: integer;                        {Window number of current window                }
  482.  
  483. {Get the front most window number}
  484.     function FirstWindowNumber: integer;                            {Window number of front most open window        }
  485.  
  486. {Get the Tool Bar's window number}
  487.     function ToolBarNumber: integer;                                {Tool Bar's window number                        }
  488.  
  489. {Get the first floating Palette's window number}
  490.     function FirstPaletteNumber: integer;                            {Front most floating Palette's window number    }
  491.  
  492. {Get the first standard window's number (not Tool Bar or Floating Palette).}
  493.     function FirstStdWindowNumber: integer;                        {Front most standard window's number            }
  494.  
  495. {Get the working window number}
  496.     function WorkWindowNumber: integer;                            {Working window number                        }
  497.  
  498. {Get the window number that contains the active editing field}
  499.     function EditFldWindowNumber: integer;                        {Window number containing active editing field    }
  500.  
  501. {Determine if a window is open}
  502.     function WindowIsOpen (Window: integer                        {Window number                                }
  503.                                     ): boolean;                                        {Is the window open?                            }
  504.  
  505. {Determine if a window is visible (open and not hidden)}
  506.     function WindowIsVisible (Window: integer                        {Window number                                }
  507.                                     ): boolean;                                        {Is the window visible?                            }
  508.  
  509. {Determine the type of window}
  510.     function WindowKind (Window: integer                            {Window number                                }
  511.                                     ): integer;                                            {Kind of window                                    }
  512.  
  513. {Get a window's "window pointer" }
  514.     function WindowPointer (Window: integer                        {Window number                                }
  515.                                     ): WindowPtr;                                        {Window's pointer                                }
  516.  
  517.  
  518. {======================================== B U T T O N S ========================================    }
  519. {Create a new button}
  520.     procedure NewButton (Button: integer;                            {Button number                                    }
  521.                                     left, top, right, bottom: integer;                    {Button's co-ordinates (local)                    }
  522.                                     Title: string;                                        {Button's title                                    }
  523.                                     procID: integer;                                    {Button's definition ID                            }
  524.                                     EnabledFlag, SelectedFlag: boolean);                {Enable the button?  Select the button?            }
  525.  
  526. {Create a new button  (co-ordinates specified as a 'rect') }
  527.     procedure NewButtonRect (Button: integer;                        {Button number                                    }
  528.                                     Bounds: rect;                                        {Button's co-ordinates (local)                    }
  529.                                     Title: string;                                        {Button's title                                    }
  530.                                     procID: integer;                                    {Button's definition ID                            }
  531.                                     EnabledFlag, SelectedFlag: boolean);                {Enable the button?  Select the button?            }
  532.  
  533. {Delete a button}
  534.     procedure DeleteButton (Button: integer);                        {Button number                                    }
  535.  
  536. {Enable/disable a button}
  537.     procedure EnableButton (Button: integer;                        {Button number                                    }
  538.                                     EnabledFlag: boolean);                            {Enable the button?                                }
  539.  
  540. {Select/deselect a button}
  541.     procedure SelectButton (Button: integer;                        {Button number                                    }
  542.                                     SelectedFlag: boolean);                            {Select the button?                                }
  543.  
  544. {Determine if a button is enabled}
  545.     function ButtonIsEnabled (Button: integer                        {Button number                                    }
  546.                                     ): boolean;                                        {Is the button enabled?                            }
  547.  
  548. {Determine if a button is selected}
  549.     function ButtonIsSelected (Button: integer                        {Button number                                    }
  550.                                     ): boolean;                                        {Is the button selected?                        }
  551.  
  552. {Set a button's title}
  553.     procedure ButtonTitle (Button: integer;                            {Button number                                    }
  554.                                     Title: string);                                    {Button's title                                    }
  555.  
  556. {Make a button the window's default button}
  557.     procedure SetDefaultButton (Button: integer);                    {Button number                                    }
  558.  
  559. {Remove the "default button status" from the window's default button}
  560.     procedure NoDefaultButton;
  561.  
  562. {"Flash" a push button as though it were pressed by the user}
  563.     procedure FlashButton (Button: integer);                        {Button number                                    }
  564.  
  565.  
  566. {=================================== P I C T U R E   B U T T O N S ==================================    }
  567. {Create a new Picture Button}
  568.     procedure NewPictButton (Button: integer;                        {Picture button number                            }
  569.                                     left, top: integer;                                    {Button's top-left corner in window's local co-ord}
  570.                                     BaseID: integer;                                    {Base image's ID number                        }
  571.                                     procID: longint;                                    {Appearance and Behavior specifications        }
  572.                                     EnabledFlag, SelectedFlag: boolean;                {"Button is enabled"  & "button is selected" flags    }
  573.                                     minimum, value, maximum: integer);                {Minimum, current, and maximum value            }
  574.  
  575. {Delete a picture button}
  576.     procedure DeletePictButton (Button: integer);                    {Picture button number                            }
  577.  
  578. {Enable/disable a picture button}
  579.     procedure EnablePictButton (Button: integer;                    {Picture button number}
  580.                                     EnabledFlag: boolean);                            {Enable the picture button?                        }
  581.  
  582. {Select/deselect a picture button}
  583.     procedure SelectPictButton (Button: integer;                    {Picture button number                            }
  584.                                     SelectedFlag: boolean);                            {Select the picture button?                        }
  585.  
  586. {Get a picture button's minimum setting}
  587.     function GetPictButtonMin (Button: integer                        {Picture button number                            }
  588.                                     ): integer;                                            {Picture button's minimum setting                }
  589.  
  590. {Set a picture button's minimum setting}
  591.     procedure SetPictButtonMin (Button: integer;                    {Picture button number                            }
  592.                                     minimum: integer);                                {Picture button's minimum setting                }
  593.  
  594. {Get a picture button's maximum setting}
  595.     function GetPictButtonMax (Button: integer                        {Picture button number                            }
  596.                                     ): integer;                                            {Picture button's maximum setting                }
  597.  
  598. {Set a picture button's maximum setting}
  599.     procedure SetPictButtonMax (Button: integer;                    {Picture button number                            }
  600.                                     maximum: integer);                                {Picture button's maximum setting                }
  601.  
  602. {Get a picture button's current value}
  603.     function GetPictButtonVal (Button: integer                        {Picture button number                            }
  604.                                     ): integer;                                            {Picture button's current value                    }
  605.  
  606. {Set a picture button's current value}
  607.     procedure SetPictButtonVal (Button: integer;                    {Picture button number                            }
  608.                                     value: integer);                                    {Picture button's value                            }
  609.  
  610. {Set a picture button's current value, and simultaneously select/deselect it}
  611.     procedure SetPictButtonValSelect (Button: integer;            {Picture button number                            }
  612.                                     value: integer;                                    {Picture button's value                            }
  613.                                     SelectedFlag: boolean);                            {Select the picture button?                        }
  614.  
  615. {Set a picture button's value acceleration 'automatic value changing'                                                }
  616.     procedure SetPictButtonAccel (Button: integer;                {Picture button number                            }
  617.                                     Rate: integer);                                    {0 = Linear, 1-3 = Slow to fast acceleration        }
  618.  
  619. {Set a picture button's speed for 'automatic value changing'                                                            }
  620.     procedure SetPictButtonSpeed (Button: integer;                {Picture button number                            }
  621.                                     Rate: integer);                                    {Rate of change (value increment per second)    }
  622.  
  623. {Determine if a picture button is enabled}
  624.     function PictButtonIsEnabled (Button: integer                    {Picture button number                            }
  625.                                     ): boolean;                                        {Is the button enabled?                            }
  626.  
  627. {Determine if a picture button is selected}
  628.     function PictButtonIsSelected (Button: integer                    {Picture button number                            }
  629.                                     ): boolean;                                        {Is the button selected?                        }
  630.  
  631. {"Flash" a picture button as though it were pressed by the user}
  632.     procedure FlashPictButton (Button: integer);                    {Picture button number                            }
  633.  
  634.  
  635. {===================================== S C R O L L   B A R S ======================================    }
  636. {Create a new scroll bar}
  637.     procedure NewScrollBar (ScrollBar: integer;                    {Scroll bar number                                }
  638.                                     left, top, right, bottom: integer;                    {Scroll bar's co-ordinates (local)                }
  639.                                     EnabledFlag: boolean;                            {Enable the scroll bar?                            }
  640.                                     minimum, value, maximum: integer);                {Minimum, current, and maximum value            }
  641.  
  642. {Create a new scroll bar (co-ordinates specified as a 'rect') }
  643.     procedure NewScrollBarRect (ScrollBar: integer;                {Scroll bar number                                }
  644.                                     Bounds: rect;                                        {Scroll bar's co-ordinates (local)                }
  645.                                     EnabledFlag: boolean;                            {Enable the scroll bar?                            }
  646.                                     minimum, value, maximum: integer);                {Minimum, current, and maximum value            }
  647.  
  648. {Delete a scroll bar}
  649.     procedure DeleteScrollBar (ScrollBar: integer);                    {Scroll bar number                                }
  650.  
  651. {Enable/disable a scroll bar}
  652.     procedure EnableScrollBar (ScrollBar: integer;                    {Scroll bar number                                }
  653.                                     EnabledFlag: boolean);                            {Enable the scroll bar?                            }
  654.  
  655. {Get a scroll bar's minimum setting}
  656.     function GetScrollBarMin (ScrollBar: integer                    {Scroll bar number                                }
  657.                                     ): integer;                                            {Scroll bar's minimum setting                    }
  658.  
  659. {Set a scroll bar's minimum setting}
  660.     procedure SetScrollBarMin (ScrollBar: integer;                    {Scroll bar number                                }
  661.                                     minimum: integer);                                {Scroll bar's minimum setting                    }
  662.  
  663. {Get a scroll bar's maximum setting}
  664.     function GetScrollBarMax (ScrollBar: integer                    {Scroll bar number                                }
  665.                                     ): integer;                                            {Scroll bar's maximum setting                    }
  666.  
  667. {Set a scroll bar's maximum setting}
  668.     procedure SetScrollBarMax (ScrollBar: integer;                    {Scroll bar number                                }
  669.                                     maximum: integer);                                {Scroll bar's maximum setting                    }
  670.  
  671. {Get a scroll bar's current value}
  672.     function GetScrollBarVal (ScrollBar: integer                        {Scroll bar number                                }
  673.                                     ): integer;                                            {Scroll bar's current value                        }
  674.  
  675. {Set a scroll bar's current value}
  676.     procedure SetScrollBarVal (ScrollBar: integer;                    {Scroll bar number                                }
  677.                                     value: integer);                                    {Scroll bar's current value                        }
  678.  
  679.  
  680. {==================================== E D I T I N G   F I E L D S ====================================    }
  681. {Allocate heap storage for a Pascal string, and initialize it.}
  682.     function NewStrHandle (StringLen: integer                        {Size of string being allocated (1-255 chars)        }
  683.                                     ): StringHandle;                                    {Handle to allocated string                        }
  684.  
  685. {Create a new field}
  686.     procedure NewField (Field: integer;                                {Field number                                    }
  687.                                     left, top, right, bottom: integer;                    {Field's viewing area co-ordinates (local)        }
  688.                                     hStr: Handle;                                        {Handle to edit field's text                        }
  689.                                     teType: integer;                                    {Type: box around field and/or CR allowed?        }
  690.                                     Just: integer);                                    {Justification: left, center, right                    }
  691.  
  692. {Create a new field (co-ordinates specified as a 'rect') }
  693.     procedure NewFieldRect (Field: integer;                            {Field number                                    }
  694.                                     Bounds: rect;                                        {Field's viewing area co-ordinates (local)        }
  695.                                     hStr: Handle;                                        {Handle to edit field's text                        }
  696.                                     teType: integer;                                    {Type: box around field and/or CR allowed?        }
  697.                                     Just: integer);                                    {Justification: left, center, right                    }
  698.  
  699. {Delete a field}
  700.     procedure DeleteField (Field: integer);                            {Field number                                    }
  701.  
  702. {Activate a  field}
  703.     procedure ActivateField (Field: integer;                            {Field number                                    }
  704.                                     Selection: integer);                                {Text selection: all, start, end                    }
  705.  
  706. {Deactivate the active field}
  707.     procedure DeactivateField;
  708.  
  709. {Process a mouse click in an inactive field.  The click has been detected by the PollSystem procedure.}
  710.     procedure ClickInField;
  711.  
  712. {Get the active field's edited text}
  713.     procedure GetFieldString (var EditString: Str255);                {Field's edited text                                }
  714.  
  715. {Save the active field's edited text in the field's string}
  716.     procedure SaveFieldString;
  717.  
  718. {Determine the active field number}
  719.     function ActiveFieldNumber: integer;                            {Active field number                            }
  720.  
  721. {Determine if a field is empty}
  722.     function FieldIsEmpty (Field: integer                            {Field number                                    }
  723.                                     ): boolean;                                        {Is the specified field empty?                    }
  724.  
  725. {Turn string length limiting on/off for each new field created starting now}
  726.     procedure FieldLengthLimit (Limits: boolean);                    {Should newly created fields be length-limited?    }
  727.  
  728. {Offset a field}
  729.     procedure OffsetField (Field: integer;                            {Field number                                    }
  730.                                     dh, dv: integer);                                    {Number of pixels to be offset (horiz/vert)        }
  731.  
  732. {Paste text into a field}
  733.     procedure PasteIntoField (Field: integer;                        {Field number                                    }
  734.                                     Text: string;                                        {Text which is to be pasted                        }
  735.                                     Replace: boolean);                                {Replace all existing text in field?                }
  736.  
  737.  
  738. {===================================== L I S T   B O X E S  =======================================    }
  739. {Create a new List Box}
  740.     procedure NewListBox (ListBox: integer;                        {List box number                                }
  741.                                     left, top, right, bottom: integer;                    {List box co-ordinates (local)                    }
  742.                                     BoxType: SignedByte);                            {Type of responses to mouse clicks, shift-click,    }
  743.                                                                     {    dragging, etc.                                }
  744.  
  745. {Create a new List Box (co-ordinates specified as a 'rect') }
  746.     procedure NewListBoxRect (ListBox: integer;                    {List box number                                }
  747.                                     Bounds: rect;                                        {List box co-ordinates (local)                    }
  748.                                     BoxType: SignedByte);                            {Type of responses to mouse clicks, shift-click,    }
  749.                                                                     {    dragging, etc.                                }
  750.  
  751. {Delete a List Box}
  752.     procedure DeleteListBox (ListBox: integer);                    {List box number                                }
  753.  
  754. {Set a line of text in a List Box}
  755.     procedure SetListBoxText (ListBox: integer;                    {List box number                                }
  756.                                     LineNum: integer;                                    {Line number                                    }
  757.                                     Text: string);                                    {Text of specified line number                    }
  758.  
  759. {Get a line of text from a List Box}
  760.     procedure GetListBoxText (ListBox: integer;                    {List box number                                }
  761.                                     LineNum: integer;                                    {Line number                                    }
  762.                                     var Text: Str255);                                {Text of specified line number                    }
  763.  
  764. {Get a List Box's line number whose text is greater than or equal to the specified string}
  765.     function SearchListBox (ListBox: integer;                        {List box number                                }
  766.                                     Text: string                                        {Text being compared                            }
  767.                                     ): integer;                                            {Line number of text                            }
  768.  
  769. {Select/deselect a specified List Box line}
  770.     procedure SetListBoxLine (ListBox: integer;                    {List box number                                }
  771.                                     LineNum: integer;                                    {Line number                                    }
  772.                                     setIt: boolean);                                    {Selects the line?                                }
  773.  
  774. {Determine if a specific List Box line is selected}
  775.     function GetListBoxLine (ListBox: integer;                        {List box number                                }
  776.                                     LineNum: integer                                    {Line number                                    }
  777.                                     ): boolean;                                        {Is the line selected?                            }
  778.  
  779. {Get the line number of a selected line in a List Box, starting at LineNum and searching down}
  780.     function GetListBoxLines (ListBox: integer;                        {List box number                                }
  781.                                     LineNum: integer                                    {Line number                                    }
  782.                                     ): integer;                                            {Next selected line                                }
  783.  
  784. {Insert a blank line into a List Box}
  785.     procedure InsertListBoxLine (ListBox: integer;                    {List box number                                }
  786.                                     LineNum: integer);                                {Line number                                    }
  787.  
  788. {Delete a line from a List Box}
  789.     procedure DeleteListBoxLine (ListBox: integer;                    {List box number                                }
  790.                                     LineNum: integer);                                {Line number                                    }
  791.  
  792. {Turn a List Box's text drawing on/off}
  793.     procedure DrawListBox (ListBox: integer;                        {List box number                                }
  794.                                     drawIt: boolean);                                    {Draw the list box's text?                        }
  795.  
  796.  
  797. {========================================= M E N U S ==========================================    }
  798. {Create the "Apple" menu}
  799.     procedure AppleMenu (AboutName: string);                    {Optional "About…" name                        }
  800.  
  801. {Create a menu name, add/change a menu item, or rename an existing menu item (pull-down & hierarchical menus)}
  802.     procedure Menu (MenuNumber: integer;                        {Menu number                                    }
  803.                                     ItemNumber: integer;                                {Item number within the menu                    }
  804.                                     EnabledFlag: boolean;                            {Enable the menu?                                }
  805.                                     MenuText: string);                                {Menu title or item name                            }
  806.  
  807. {Attach a hierarchical menu to a menu item, or detach a hierarchical menu.}
  808.     procedure AttachMenu (MenuNumber: integer;                    {Menu number to which the submenu is attached}
  809.                                     ItemNumber: integer;                                {Item number to which the submenu is attached    }
  810.                                     SubMenuNumber: integer);                        {Hierarchical menu number being attached        }
  811.  
  812. {Insert a menu item}
  813.     procedure InsertMenuitem (MenuNumber: integer;                {Menu number                                    }
  814.                                     ItemNumber: integer;                                {Item number where insertion is to be made        }
  815.                                     EnabledFlag: boolean;                            {Enable the menu?                                }
  816.                                     MenuText: string);                                {Item name                                        }
  817.  
  818. {Remove an entire menu and its associated items, or a menu item}
  819.     procedure RemoveMenu (MenuNumber: integer;                {Menu number                                    }
  820.                                     ItemNumber: integer);                            {Item number within the menu (0=entire menu)    }
  821.  
  822. {Display the menu bar after making changes through the Menu or RemoveMenu procedure}
  823.     procedure UpdateMenuBar;
  824.  
  825. {Get a menu item's text}
  826.     procedure GetMenuString (MenuNumber: integer;                {Menu number                                    }
  827.                                     ItemNumber: integer;                                {Item number within the menu                    }
  828.                                     var MenuText: Str255);                            {Menu item's name                                }
  829.  
  830. {Change the name of a menu item}
  831.     procedure RenameItem (MenuNumber: integer;                    {Menu number                                    }
  832.                                     ItemNumber: integer;                                {Item number within the menu                    }
  833.                                     MenuText: string);                                {Menu item's name                                }
  834.  
  835. {Enable/disable a menu or menu item}
  836.     procedure EnableMenu (MenuNumber: integer;                    {Menu number                                    }
  837.                                     ItemNumber: integer;                                {Item number within the menu (or 0)                }
  838.                                     EnabledFlag: boolean);                            {Enable the menu or item?                        }
  839.  
  840. {Display/remove a menu item's check mark}
  841.     procedure CheckMenu (MenuNumber: integer;                    {Menu number                                    }
  842.                                     ItemNumber: integer;                                {Item number within the menu                    }
  843.                                     checked: boolean);                                {Place check mark beside the menu item?        }
  844.  
  845. {Mark a menu item with a specified character (√ or •, etc)}
  846.     procedure MenuMark (MenuNumber: integer;                    {Menu number                                    }
  847.                                     ItemNumber: integer;                                {Item number within the menu                    }
  848.                                     markChar: char);                                    {Menu item's character                            }
  849.  
  850. {Get a menu item's ‘mark’ character (√ or •, etc) which is optionally displayed at the item's left side}
  851.     procedure GetMenuMark (MenuNumber: integer;                {Menu number                                    }
  852.                                     ItemNumber: integer;                                {Item number within the menu                    }
  853.                                     var markChar: char);                                {Menu item's character                            }
  854.  
  855. {Specify a keyboard equivalent for a menu item}
  856.     procedure MenuCmd (MenuNumber: integer;                    {Menu number                                    }
  857.                                     ItemNumber: integer;                                {Item number within the menu                    }
  858.                                     cmdChar: char);                                    {Menu item's keyboard-equivalent character    }
  859.  
  860. {Get a keyboard equivalent for a menu item}
  861.     procedure GetMenuCmd (MenuNumber: integer;                {Menu number                                    }
  862.                                     ItemNumber: integer;                                {Item number within the menu                    }
  863.                                     var cmdChar: char);                                {Menu item's keyboard-equivalent character    }
  864.  
  865. {Specify an icon to be displayed by a menu item}
  866.     procedure MenuIcon (MenuNumber: integer;                    {Menu number                                    }
  867.                                     ItemNumber: integer;                                {Item number within the menu                    }
  868.                                     IconSelector: integer);                            {IconSelector + 256 = cicn or ICON ID            }
  869.  
  870. {Get the specifier for the icon that is displayed by a menu item}
  871.     procedure GetMenuIcon (MenuNumber: integer;                {Menu number                                    }
  872.                                     ItemNumber: integer;                                {Item number within the menu                    }
  873.                                     var IconSelector: integer);                        {IconSelector + 256 = cicn or ICON ID            }
  874.  
  875. {Set the character style for a menu item}
  876.     procedure MenuStyle (MenuNumber: integer;                    {Menu number                                    }
  877.                                     ItemNumber: integer;                                {Item number within the menu                    }
  878.                                     theStyle: Style);                                    {Menu item's character style                    }
  879.  
  880. {Determine the number of items in a menu}
  881.     function MenuItemCount (MenuNumber: integer                    {Menu number                                    }
  882.                                     ): integer;                                            {Number of items in the menu                    }
  883.  
  884. {Determine a menu's parent menu number}
  885.     procedure GetParentMenu (var MenuNumber: integer;            {Parent menu's menu number                    }
  886.                                     var ItemNumber: integer;                            {Parent menu's item number                     }
  887.                                     SubMenuNumber: integer);                        {Menu number whose parent menu is determined}
  888.  
  889. {Determine a menu item's submenu number}
  890.     procedure GetSubMenu (MenuNumber: integer;                    {Menu number                                    }
  891.                                     ItemNumber: integer;                                {Item number within the menu                    }
  892.                                     var SubMenuNumber: integer);                    {Menu number of this item's submenu            }
  893.  
  894. {Highlight a menu in the menu bar, or turn off menu bar highlights}
  895.     procedure MenuHilite (MenuNumber: integer);                    {Menu num for a pull-down menu (1-15, 0=none)    }
  896.  
  897.  
  898. {==================================== P O P - U P   M E N U S =====================================    }
  899. {Create a new Pop-Up menu}
  900.     procedure NewPopUp (MenuNumber: integer;                    {Pop-Up Menu number                            }
  901.                                     left, top, right, bottom: integer;                    {Enclosing rectangle co-ordinates (local)        }
  902.                                     MenuTitle: string;                                {Title                                            }
  903.                                     procID: integer;                                    {Appearance & Behavior specifications            }
  904.                                     EnabledFlag: boolean);                            {"Menu is enabled" flag                            }
  905.  
  906. {Create a new Pop-Up menu (co-ordinates specified as a 'rect') }
  907.     procedure NewPopUpRect (MenuNumber: integer;                {Pop-Up Menu number                            }
  908.                                     Bounds: rect;                                        {Enclosing rectangle co-ordinates (local)        }
  909.                                     Title: string;                                        {Title                                            }
  910.                                     procID: integer;                                    {Appearance & Behavior specifications            }
  911.                                     EnabledFlag: boolean);                            {"Menu is enabled"  flag                            }
  912.  
  913. {Add or change a Pop-Up menu item, or rename an existing menu item}
  914.     procedure PopUpMenu (MenuNumber: integer;                    {Pop-Up Menu number                            }
  915.                                     ItemNumber: integer;                                {Item number within the menu                    }
  916.                                     EnabledFlag: boolean;                            {Enable the menu?                                }
  917.                                     MenuText: string);                                {Item name                                        }
  918.  
  919. {Insert a Pop-Up menu item}
  920.     procedure InsertPopUpItem (MenuNumber: integer;                {Pop-Up Menu number                            }
  921.                                     ItemNumber: integer;                                {Item number where insertion is to be made        }
  922.                                     EnabledFlag: boolean;                            {Is menu item enabled?                            }
  923.                                     MenuText: string);                                {Item name                                        }
  924.  
  925. {Remove an Pop-Up menu, or a Pop-Up menu item}
  926.     procedure RemovePopUp (MenuNumber: integer;                {Pop-Up Menu number                            }
  927.                                     ItemNumber: integer);                            {Item number within the menu (0=entire menu)    }
  928.  
  929. {Get an Pop-Up Menu item's text}
  930.     procedure GetPopUpString (MenuNumber: integer;                {Pop-Up Menu number                            }
  931.                                     ItemNumber: integer;                                {Item number within the menu                    }
  932.                                     var MenuText: str255);                            {Menu item's name                                }
  933.  
  934. {Change the name of a Pop-Up Menu item}
  935.     procedure RenamePopUp (MenuNumber: integer;                {Pop-Up Menu number                            }
  936.                                     ItemNumber: integer;                                {Item number within the menu                    }
  937.                                     MenuText: string);                                {Menu item's name                                }
  938.  
  939. {Enable/disable a Pop-Up Menu or menu item}
  940.     procedure EnablePopUp (MenuNumber: integer;                {Pop-Up Menu number                            }
  941.                                     ItemNumber: integer;                                {Item number within the menu (or 0)                }
  942.                                     EnabledFlag: boolean);                            {Enable the menu or item?                        }
  943.  
  944. {Determine if a Pop-Up Menu is enabled}
  945.     function PopUpIsEnabled (MenuNumber: integer                {Pop-Up Menu number                            }
  946.                                     ): boolean;                                        {Is the menu enabled?                            }
  947.  
  948. {Display/remove a Pop-Up Menu item's check mark}
  949.     procedure CheckPopUp (MenuNumber: integer;                    {Pop-Up Menu number                            }
  950.                                     ItemNumber: integer;                                {Item number within the menu                    }
  951.                                     checked: boolean);                                {Place check mark beside the menu item?        }
  952.  
  953. {Mark a Pop-Up Menu item with a specified character (√ or •, etc)}
  954.     procedure PopUpMark (MenuNumber: integer;                    {Pop-Up Menu number                            }
  955.                                     ItemNumber: integer;                                {Item number within the menu                    }
  956.                                     markChar: char);                                    {Menu item's character                            }
  957.  
  958. {Get a Pop-Up Menu item's ‘mark’ character (√ or •, etc) which is optionally displayed at the item's left side}
  959.     procedure GetPopUpMark (MenuNumber: integer;                {Pop-Up Menu number                            }
  960.                                     ItemNumber: integer;                                {Item number within the menu                    }
  961.                                     var markChar: char);                                {Menu item's character                            }
  962.  
  963. {Specify an icon to be displayed by a Pop-Up Menu item}
  964.     procedure PopUpIcon (MenuNumber: integer;                    {Pop-Up Menu number                            }
  965.                                     ItemNumber: integer;                                {Item number within the menu                    }
  966.                                     IconSelector: integer);                            {IconSelector + 256 = cicn or ICON ID            }
  967.  
  968. {Get the specifier for the icon that is displayed by a Pop-Up Menu item}
  969.     procedure GetPopUpIcon (MenuNumber: integer;                {Pop-Up Menu number                            }
  970.                                     ItemNumber: integer;                                {Item number within the menu                    }
  971.                                     var IconSelector: integer);                        {IconSelector + 256 = cicn or ICON ID            }
  972.  
  973. {Set the character style for a Pop-Up Menu item}
  974.     procedure PopUpStyle (MenuNumber: integer;                    {Pop-Up Menu number                            }
  975.                                     ItemNumber: integer;                                {Item number within the menu                    }
  976.                                     theStyle: Style);                                    {Menu item's character style                    }
  977.  
  978. {Determine the number of items in a Pop-Up Menu}
  979.     function PopUpItemCount (MenuNumber: integer                {Pop-Up Menu number                            }
  980.                                     ): integer;                                            {Number of items in the menu                    }
  981.  
  982. {Determine the selected item in a Pop-Up Menu}
  983.     function GetPopUpSelection (MenuNumber: integer                {Pop-Up Menu number                            }
  984.                                     ): integer;                                            {Selected item in the menu                        }
  985.  
  986.  
  987. {======================================= C U R S O R S  ========================================    }
  988. {Change the cursor shape}
  989.     procedure CursorShape (CursorType: integer);                    {Cursor type                                    }
  990.  
  991. {Reset the cursor to its appropriate shape depending on its location in the active window.}
  992.     procedure ResetCursor;
  993.  
  994. {Create a new Cursor Table}
  995.     procedure NewCursorTable (CursorTable: integer;                {Cursor table number                            }
  996.                                     CursorType: integer);                                {Cursor type                                    }
  997.  
  998. {Delete a Cursor Table}
  999.     procedure DeleteCursorTable (CursorTable: integer);            {Cursor table number                            }
  1000.  
  1001. {Add a new Cursor Zone to a Cursor Table, or replace an existing Cursor Zone}
  1002.     procedure CursorZone (CursorTable: integer;                    {Cursor table number                            }
  1003.                                     CursorZone: integer;                                {Cursor zone number                            }
  1004.                                     CursorType: integer;                                {Cursor type                                    }
  1005.                                     left, top, right, bottom: integer);                    {Cursor zone's co-ordinates (local)                }
  1006.  
  1007. {Add a new Cursor Zone to a Cursor Table, or replace an existing Cursor Zone (co-ordinates specified as a 'rect') }
  1008.     procedure CursorZoneRect (CursorTable: integer;                {Cursor table number                            }
  1009.                                     CursorZone: integer;                                {Cursor zone number                            }
  1010.                                     CursorType: integer;                                {Cursor type                                    }
  1011.                                     ZoneRect: rect);                                    {Cursor zone's co-ordinates (local)                }
  1012.  
  1013. {Add a new Cursor Zone to a Cursor Table, or replace an existing Cursor Zone (co-ordinates specified as a 'region') }
  1014.     procedure CursorZoneRgn (CursorTable: integer;                {Cursor table number                            }
  1015.                                     CursorZone: integer;                                {Cursor zone number                            }
  1016.                                     CursorType: integer;                                {Cursor type                                    }
  1017.                                     ZoneRgn: RgnHandle);                            {Cursor zone's region (local)                    }
  1018.  
  1019. {Indicate that the cursor shape may have to be recalculated due to manually altering Cursor Zone regions.}
  1020.     procedure ChangedCursorZone;
  1021.  
  1022. {Delete a Cursor Zone}
  1023.     procedure DeleteCursorZone (CursorTable: integer;                {Cursor table number                            }
  1024.                                     CursorZone: integer);                                {Cursor zone number                            }
  1025.  
  1026. {Get the bounding rectangle of a specified Cursor Zone}
  1027.     procedure GetCursorZone (CursorTable: integer;                {Cursor table number                            }
  1028.                                     CursorZone: integer;                                {Cursor zone number                            }
  1029.                                     var ZoneRect: rect);                                {Cursor zone's bounding rectangle                }
  1030.  
  1031. {Get a handle to a specified Cursor Zone's region}
  1032.     function GetCursorZoneRgn (CursorTable: integer;                {Cursor table number                            }
  1033.                                     CursorZone: integer                                {Cursor zone number                            }
  1034.                                     ): RgnHandle;                                        {Handle to Cursor zone's region                    }
  1035.  
  1036. {Make the current window use a specified Cursor Table}
  1037.     procedure UseCursorTable (CursorTable: integer);                {Cursor table number                            }
  1038.  
  1039. {Find the cursor zone that contains a specified point}
  1040.     function FindCursorZone (thePoint: point                        {Location in window's local co-ordinates            }
  1041.                                     ): integer;                                            {Cursor zone number containing the point        }
  1042.  
  1043. {Enable/disable clicks on push-buttons when the watchCursor is displayed}
  1044.     procedure WatchCursorButtons (Allowed: boolean);            {Can push-buttons be clicked when the            }
  1045.                                                                     {    watchCursor is displayed?                    }
  1046.  
  1047.  
  1048. {======================================== P O L L I N G =========================================    }
  1049. {Tools Plus polling procedure}
  1050.     function PollSystem (var UserPoll: TPPollRecord                {Polling record                                    }
  1051.                                     ): boolean;                                        {Did an event occurred?                        }
  1052.  
  1053. {Set the number of ticks (1/60 sec) your application can wait until it receives a doNothing event.}
  1054.     procedure SetNullTime (ForegroundTime: longint;                {Duration when application is active                }
  1055.                                     BackgroundTime: longint);                        {Duration when application is suspended        }
  1056.  
  1057. {Determine if "waiting for doNothing events" (timed doNothing events) is supported.}
  1058.     function WaitAvail: boolean;                                    {Is waiting between doNothing events supported?}
  1059.  
  1060. {Determine if your application is 'suspended' (i.e. this is not the active application)}
  1061.     function ApplicationSuspended: boolean;                        {Is your application suspended?                }
  1062.  
  1063. {Clear the mouse's current click or drag (i.e. discontinue the process, clear the event}
  1064.     procedure ResetMouseClicks;
  1065.  
  1066.  
  1067. {==================================== C O L O R   D R A W I N G ===================================    }
  1068. {Determine if the Macintosh has Color QuickDraw}
  1069.     function HasColorQuickDraw: boolean;                            {Does the Mac have Color QuickDraw?            }
  1070.  
  1071. {Determine the number of logical screens (distinct screen depth and color/gray settings)}
  1072.     function NumberOfScreens: integer;                            {Number of logical screens available            }
  1073.  
  1074. {Begin updating the specified logical screen}
  1075.     procedure BeginUpdateScreen (TheScreen: integer);            {Logical screen number                            }
  1076.  
  1077. {End updating the most recent logical screen}
  1078.     procedure EndUpdateScreen;
  1079.  
  1080. {Determine the logical screen's depth}
  1081.     function ScreenDepth: integer;                                    {Screen depth in bits                            }
  1082.  
  1083. {Determine if the logical screen is set to display in color    }
  1084.     function ScreenHasColors: boolean;                            {Is the screen set to display in color?            }
  1085.  
  1086. {Color equivalent to 'PenNormal' routine}
  1087.     procedure PenColorNormal;
  1088.  
  1089. {Color equivalent to 'GetPenState' routine}
  1090.     procedure GetColorPenState (var ThePenState: ColorPenState);
  1091.  
  1092. {Color equivalent to 'SetPenState' routine}
  1093.     procedure SetColorPenState (ThePenState: ColorPenState);
  1094.  
  1095.  
  1096. {================================= U S E R    N O T I F I C A T I O N =================================    }
  1097. {Define the settings for the Notification Manager.}
  1098.     procedure SetNotification (IconID: integer;                        {'SICN' icon ID displayed during notification        }
  1099.                                     SoundID: integer;                                    {Sound ID that is played at notification            }
  1100.                                     Message: string;                                {Message displayed during notification            }
  1101.                                     ResetAfterUse: boolean);                            {Revert settings to defaults after notification?    }
  1102.  
  1103. {If this application is inactive, inform user that this application needs attention.}
  1104.     function PostNotification: boolean;                                {Was the user notified?                            }
  1105.  
  1106.  
  1107. {==================================== M I S C E L L A N E O U S ===================================    }
  1108. {Determine the System file version}
  1109.     function SystemVersion: extended;                                {System file version (eg: 7.0.1 returned as 7.01)}
  1110.  
  1111. {Draw an icon (ICON, ICN#, icl8, icl4, and cicn)}
  1112.     procedure DrawIcon (theIcon: integer;                            {Icon ID number                                }
  1113.                                     left, top: integer;                                    {Icon's top-left corner in window's local co-ord.    }
  1114.                                     EnabledFlag, SelectedFlag: boolean);                {Enable the icon?  Select the icon?                }
  1115.  
  1116. {Specify the default appearance for disabled icons}
  1117.     procedure DefaultIconLook (IconSpec: integer);                {Appearance specifications                        }
  1118.  
  1119. {Draw a standard Macintosh progress thermometer}
  1120.     procedure DrawThermometer (DisplayRect: rect;                {Thermometer's co-ordinates (local)                }
  1121.                                     Value: longint;                                    {Current value                                    }
  1122.                                     Maximum: longint);                                {Maximum value (progress = Value ÷ Maximum)    }
  1123.  
  1124. {Display a dynamic Alert Box and return the use's action}
  1125.     function AlertBox (theIcon: integer;                                {Icon ID number                                }
  1126.                                     AlertText: string;                                {Alert's text                                        }
  1127.                                     AlertCode: longint                                {Button setup codes                            }
  1128.                                     ): integer;                                            {Button clicked by user                            }
  1129.  
  1130. {Change a button name for the next use of the dynamic Alert Box}
  1131.     procedure AlertButtonName (Button: integer;                    {Button number from 1 to 9                        }
  1132.                                     Title: string);                                    {Button's title                                    }
  1133.  
  1134. {Draw "zoom" lines (expanding/collapsing rectangle)}
  1135.     procedure ZoomLines (OldRect: Rect;                            {Starting rectangle (global co-ordinates)        }
  1136.                                     NewRect: Rect;                                    {Ending rectangle (global co-ordinates)            }
  1137.                                     Zoom: integer);                                    {Zoom across, in, or out                            }
  1138.  
  1139. {Play the System Error sound}
  1140.     procedure Beep;
  1141.  
  1142. {Wait for a specified duration}
  1143.     procedure Wait (ClockTicks: longint);                            {Number of ticks (1/60th sec) to wait            }
  1144.  
  1145. {Determine the minimum value of 2 numbers}
  1146.     function min (Val1, Val2: longint): longint;
  1147.  
  1148. {Determine the maximum value of 2 numbers}
  1149.     function max (Val1, Val2: longint): longint;
  1150.  
  1151.  
  1152.  
  1153.  
  1154.  
  1155. {PRIVATE:    This function obtains the System file's version number as an integer for the SystemVersion function.    }
  1156.     function _SYSV: integer;
  1157.  
  1158.  
  1159.  
  1160. implementation
  1161.  
  1162. {The SystemVersion function returns the System File's version as an 'extended' type floating-point number.  This    }
  1163. {source code, when compiled, will produce an appropriate 'extended' type floating-point number whose format is        }
  1164. {determined by your compiler's settings (ie: Compiled for a math co-processor, 68040, or not)                        }
  1165.     function SystemVersion;
  1166.     begin
  1167.         SystemVersion := _SYSV / 100;                                {Get System Version and convert to an            }
  1168.     end;                                                                {    extended type.                                }
  1169.  
  1170. end.